CTF题型汇总

新的坑

题型

1.MISC:杂项;2.PPC:编程类;3.CRYPTO:加密方式;4.REVERSE:逆向;5.PWN:基于程序的逻辑分析;6.WEB:web狗

Web主要知识点

常用工具

Chrome/Firefox(抓包)、BurpSuite、Postman(发包)、Putty(攻防连接)、PyCharm/PHPStorm(代码工具)

扫描器:AWVS、sqlmap

分类

代码审计、弱类型、暴力、命令执行、SQL注入、XSS、逻辑漏洞、文件上传、文件包含

代码审计

PWN(360)

分类

Linux libc pwn、虚拟机pwn、浏览器pwn、Linux内核pwn

Linux libc pwn

栈溢出类型、格式化字符串类型、堆相关类型、整形溢出类型、FILE结构体利用类型、条件竞争类型

栈溢出类型

前提:程序必须向栈上写入数据;写入的数据大小没有被良好地控制。

1
2
3
char buf[0*10];
...
read(0,buf,0*100)

1.Ret2shellcode

2.NX保护开启,则使用ROP技术。

流程

1.先定位可以栈溢出的函数;2.确定栈溢出的长度;3.确定保护机制(是否开启canary、NX)

进阶:ret2syscall、ret2libc、ret2_dl_runtime_resolve、BROP、SROP。

格式化字符串
1
2
3
read(0,buf,0*100);
...
printf(buf);

流程

1.先找到printf、fprintf、sprintf、snprintf等格式化字符串函数;2.看其中是否有格式化字符串参数,从而判断是否存在格式化字符串漏洞(自动化检测工具lazyIDA);3.确定使用该漏洞是进行信息泄露还是内存写入(%n、%hn、%hhn);4.确定信息泄露或者内存写入的目标地址所在的参数偏移位置,利用%order$s、%order$n进行调整;5确定保护机制是否开启RELRO保护。(若没有开启,则用其覆写劫持GOT表;若开启,则用其覆写劫持返回地址)

堆相关类型

由低地址向高地址增长。

Linux的堆分配器是glibc中的ptmalloc2,通过malloc/free函数来分配和释放内存块。

利用

覆盖与其物理相邻的下一个chunk的内容。利用堆中的机制(如unlink等)实现任意地址写入或控制堆块中的内容等效果,从而来控制程序的执行流。

UAF:Use After Free。内存块被释放后,对应的指针没有被设置为NULL,在它下一次使用之前,对这段代码进行修改,那么当程序再使用这块内存,就会被执行修改后的代码。

流程

1.先跟踪程序中某一堆块的申请、使用、释放的过程;2.仔细分析堆块mem区域的数据(是否有函数指针等);3.搞清楚程序中对于堆块的管理方式;4.先找到对于堆块的写入有没有溢出;5.看释放堆块的函数中是否有UAF;6.采用对应的利用方法去利用。

进阶:Off-By-One、Overlapping、unlink、Fastbin Attack、Unsorted Bin Attack、Tcache Attack、House Of Force、House Of Force、House Of Lore、House Of Orange、House Of Roman。

整形溢出类型

宽度溢出、算数溢出、符号溢出

FILE结构体利用类型

伪造FILE结构体,修改vtable

SQL注入

空格:%20; ':%27; #:%23;\:%5C

AD考点

WEB:命令执行、文件包含、sql注入、文件上传、一定不会有xss,csrf,ssrf。

PWN:命令执行、栈溢出、格式化字符串、堆

0%